package com.gomoku;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JList;

// 对手列表窗口
class RivalWindow extends JDialog implements ActionListener {
    public interface Callback {
        void onGetRivalName(String rivalName);  // 获取对手的名字事件
    }

    private final JButton mButtonCancel;        // "取消"按钮
    private final JButton mButtonOK;            // "确定"按钮
    private final Callback mCallback;           // 回调
    private final JList<String> mListViewUsers; // 用户列表控件
    
    /**
     * 构造方法。
     * @param callback  回调
     */
    public RivalWindow(Callback callback) {
        mButtonCancel = new JButton(Const.getString("IDS_CANCEL"));
        mButtonOK = new JButton(Const.getString("IDS_OK"));
        mCallback = callback;
        mListViewUsers = new JList<>();

        // 设置窗口标题
        super.setTitle(Const.getString("IDS_RIVAL_LIST"));
        
        // 设置窗口尺寸不能改变
        super.setResizable(false);
        
        // 设置窗口尺寸
        super.setSize(Const.RIVAL_WINDOW_WIDTH, Const.RIVAL_WINDOW_HEIGHT);

        // 设置窗口居中
        super.setLocationRelativeTo(null);
        
        // 设置窗口布局
        super.setLayout(null);
        
        // 设置用户列表
        mListViewUsers.setBorder(BorderFactory.createEtchedBorder());
        mListViewUsers.setBounds(Const.RIVAL_WINDOW_USER_LIST_BOUNDS);
        super.add(mListViewUsers);

        // 设置"确定"按钮
        mButtonOK.addActionListener(this);
        mButtonOK.setBounds(Const.RIVAL_WINDOW_BUTTON_OK_BOUNDS);
        super.add(mButtonOK);

        // 设置"取消"按钮
        mButtonCancel.addActionListener(this);
        mButtonCancel.setBounds(Const.RIVAL_WINDOW_BUTTON_CANCEL_BOUNDS);
        super.add(mButtonCancel);
    }

    /**
     * 按钮的单击响应方法。
     * @param e 事件相关信息
     */
    public void actionPerformed(ActionEvent e) {
        final Object button = e.getSource();
        if (button == mButtonOK) {
            this.onOK();
        } else if (button == mButtonCancel) {
            this.onCancel();
        }
    }

    /**
     * "取消"按钮的单击响应方法。
     */
    private void onCancel() {
        // 关闭窗口
        this.setVisible(false);
    }

    /**
     * "确定"按钮的单击响应方法。
     */
    private void onOK() {
        // 获取用户选择的名字
        final int index = mListViewUsers.getSelectedIndex();
        if (index == -1) {
            return;
        }
        final String selectedName = mListViewUsers.getModel().getElementAt(index);
        mCallback.onGetRivalName(selectedName);
        
        // 关闭窗口
        this.setVisible(false);
    }
    
    /**
     * 设置用户名列表。
     * @param usernameList  用户名列表
     */
    public void setUsernameList(List<String> usernameList) {
        final String[] usernameArray = new String[usernameList.size()];
        usernameList.toArray(usernameArray);
        mListViewUsers.setListData(usernameArray);
    }
}
